#pragma once
#ifndef DETECTOR_HPP_
#define DETECTOR_HPP_
#include <cv_bridge/cv_bridge.h>
#include "image_transport/image_transport.hpp"
#include "opencv2/opencv.hpp"
#include "rclcpp/rclcpp.hpp"
using namespace cv;
#include <vector>
using namespace std;

class JianChe
{
public:
  // 构造函数
  JianChe();
  // 辨别装甲板并可视化
  Mat ShiBei(const Mat &inVideoFrame);
  // 根据颜色区分装甲板
  Scalar ArmorColor(int color_flag);
  // 获取测距结果
  vector<double> DistanceResults() { return distances; }
  // 获取识别到的装甲板中心点
  vector<Point2f> ArmorCenters() { return armor_centers; }

private:
  // 识别装甲板的具体函数
  vector<Rect> findArmors(const Mat &frame, int color_flag);
  // 判断是否为装甲板
  bool isArmor(const Mat &contourROI);

private:
  bool isValidArmorPair(const Rect &lightBar1, const Rect &lightBar2);
  Rect getArmorRect(const Rect &lightBar1, const Rect &lightBar2);
  // PnP相关参数
  vector<double> distances;      // 存储每个装甲板的距离
  vector<Point2f> armor_centers; // 装甲板中心点
  Mat camera_matrix;             // 相机内参矩阵
  Mat dist_coeffs;               // 畸变系数
};

#endif // VIDEO_PUBLISHER_HPP_
